package com.smart.tool.extension;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.stereotype.Component;

/**
 * 扩展点注释类
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ExtensionAnnotation {



    /**
     * 使用场景，一个场景下会有多个case，不同的场景使用不同的描述
     *
     * @return
     */
    String scene();


    /**
     * 场景下具体的使用点
     *
     * @return
     */
    String useCase();

    /**
     * 扩展点类型，分为普通扩展点和责任链扩展点
     * @return
     */
    ExtensionType type() default ExtensionType.COMMON;

    /**
     * 如果是多个扩展点，可以进行排序，
     * @return
     */
    int order() default 0;
}
